package api

// 注销
//	{
//		"mediaServerId" : "your_server_id",
//		"app" : "live",
//		"regist" : false,
//		"schema" : "rtsp",
//		"stream" : "obs",
//		"vhost" : "__defaultVhost__"
//	}

// 注册
//
//	{
//	    "regist" : true,
//	    "aliveSecond": 0, #存活时间，单位秒
//	    "app": "live", # 应用名
//	    "bytesSpeed": 0, #数据产生速度，单位byte/s
//	    "createStamp": 1617956908,  #GMT unix系统时间戳，单位秒
//	    "mediaServerId": "your_server_id", # 服务器id
//	    "originSock": {
//	        "identifier": "000001C257D35E40",
//	        "local_ip": "172.26.20.112", # 本机ip
//	        "local_port": 50166, # 本机端口
//	        "peer_ip": "172.26.20.112", # 对端ip
//	        "peer_port": 50155 # 对端port
//	    },
//	    "originType": 8,  # 产生源类型，包括 unknown = 0,rtmp_push=1,rtsp_push=2,rtp_push=3,pull=4,ffmpeg_pull=5,mp4_vod=6,device_chn=7,rtc_push=8
//	    "originTypeStr": "rtc_push",
//	    "originUrl": "", #产生源的url
//	    "readerCount": 0, # 本协议观看人数
//	    "schema": "rtsp", # 协议
//	    "stream": "test",  # 流id
//	    "totalReaderCount": 0, # 观看总人数，包括hls/rtsp/rtmp/http-flv/ws-flv/rtc
//	    "tracks": [{
//	       "channels" : 1, # 音频通道数
//	       "codec_id" : 2, # H264 = 0, H265 = 1, AAC = 2, G711A = 3, G711U = 4
//	       "codec_id_name" : "CodecAAC", # 编码类型名称
//	       "codec_type" : 1, # Video = 0, Audio = 1
//	       "ready" : true, # 轨道是否准备就绪
//	       "sample_bit" : 16, # 音频采样位数
//	       "sample_rate" : 8000 # 音频采样率
//	    },
//	    {
//	       "codec_id" : 0, # H264 = 0, H265 = 1, AAC = 2, G711A = 3, G711U = 4
//	       "codec_id_name" : "CodecH264", # 编码类型名称
//	       "codec_type" : 0, # Video = 0, Audio = 1
//	       "fps" : 59,  # 视频fps
//	       "height" : 720, # 视频高
//	       "ready" : true,  # 轨道是否准备就绪
//	       "width" : 1280 # 视频宽
//	    }],
//	    "vhost": "__defaultVhost__"
//	}
type onStreamChangedInput struct {
	Regist           bool       `json:"regist"`
	AliveSecond      int        `json:"aliveSecond"`
	App              string     `json:"app"`
	BytesSpeed       int        `json:"bytesSpeed"`
	CreateStamp      int        `json:"createStamp"`
	MediaServerID    string     `json:"mediaServerId"`
	OriginSock       OriginSock `json:"originSock"`
	OriginType       int        `json:"originType"`
	OriginTypeStr    string     `json:"originTypeStr"`
	OriginURL        string     `json:"originUrl"`
	ReaderCount      int        `json:"readerCount"`
	Schema           string     `json:"schema"`
	Stream           string     `json:"stream"`
	TotalReaderCount int        `json:"totalReaderCount"`
	Tracks           []Tracks   `json:"tracks"`
	Vhost            string     `json:"vhost"`
}
type OriginSock struct {
	Identifier string `json:"identifier"`
	LocalIP    string `json:"local_ip"`
	LocalPort  int    `json:"local_port"`
	PeerIP     string `json:"peer_ip"`
	PeerPort   int    `json:"peer_port"`
}
type Tracks struct {
	Channels    int     `json:"channels,omitempty"`
	CodecID     int     `json:"codec_id"`
	CodecIDName string  `json:"codec_id_name"`
	CodecType   int     `json:"codec_type"`
	Ready       bool    `json:"ready"`
	SampleBit   int     `json:"sample_bit,omitempty"`
	SampleRate  int     `json:"sample_rate,omitempty"`
	Fps         float32 `json:"fps,omitempty"`
	Height      int     `json:"height,omitempty"`
	Width       int     `json:"width,omitempty"`
}

// 心跳
// {
// 	"data" : {
// 		"Buffer" : 12,
// 		"BufferLikeString" : 0,
// 		"BufferList" : 0,
// 		"BufferRaw" : 12,
// 		"Frame" : 0,
// 		"FrameImp" : 0,
// 		"MediaSource" : 0,
// 		"MultiMediaSourceMuxer" : 0,
// 		"RtmpPacket" : 0,
// 		"RtpPacket" : 0,
// 		"Socket" : 108,
// 		"TcpClient" : 0,
// 		"TcpServer" : 96,
// 		"TcpSession" : 0,
// 		"UdpServer" : 12,
// 		"UdpSession" : 0
// 	 },
// 	 "mediaServerId" : "192.168.255.10"
//   }

type onServerKeepaliveInput struct {
	Data          Data   `json:"data"`
	HookIndex     int    `json:"hook_index"`
	MediaServerID string `json:"mediaServerId"`
}
type Data struct {
	Buffer                int `json:"Buffer"`
	BufferLikeString      int `json:"BufferLikeString"`
	BufferList            int `json:"BufferList"`
	BufferRaw             int `json:"BufferRaw"`
	Frame                 int `json:"Frame"`
	FrameImp              int `json:"FrameImp"`
	MediaSource           int `json:"MediaSource"`
	MultiMediaSourceMuxer int `json:"MultiMediaSourceMuxer"`
	RtmpPacket            int `json:"RtmpPacket"`
	RtpPacket             int `json:"RtpPacket"`
	Socket                int `json:"Socket"`
	TCPClient             int `json:"TcpClient"`
	TCPServer             int `json:"TcpServer"`
	TCPSession            int `json:"TcpSession"`
	UDPServer             int `json:"UdpServer"`
	UDPSession            int `json:"UdpSession"`
}

type onPublishInput struct {
	MediaServerID string `json:"mediaServerId"`
	App           string `json:"app"`
	ID            string `json:"id"`     // TCP 链接唯一 ID
	IP            string `json:"ip"`     // 推流器 ip
	Params        string `json:"params"` // 推流 url 参数
	Port          int    `json:"port"`   // 推流器端口号
	Schema        string `json:"schema"` // 推流的协议，可能是 rtsp、rtmp
	Stream        string `json:"stream"`
	Vhost         string `json:"vhost"` // 流虚拟主机
}

type onPublishOutput struct {
	DefaultOutput
	AddMuteAudio   *bool   `json:"add_mute_audio,omitempty"`
	ContinuePushMs *int    `json:"continue_push_ms,omitempty"`
	EnableAudio    *bool   `json:"enable_audio,omitempty"`
	EnableFmp4     *bool   `json:"enable_fmp4,omitempty"`
	EnableHls      *bool   `json:"enable_hls,omitempty"`
	EnableHlsFmp4  *bool   `json:"enable_hls_fmp4,omitempty"`
	EnableMp4      *bool   `json:"enable_mp4,omitempty"`
	EnableRtmp     *bool   `json:"enable_rtmp,omitempty"`
	EnableRtsp     *bool   `json:"enable_rtsp,omitempty"`
	EnableTs       *bool   `json:"enable_ts,omitempty"`
	HlsSavePath    *string `json:"hls_save_path,omitempty"`
	ModifyStamp    *bool   `json:"modify_stamp,omitempty"`
	Mp4AsPlayer    *bool   `json:"mp4_as_player,omitempty"`
	Mp4MaxSecond   *int    `json:"mp4_max_second,omitempty"`
	Mp4SavePath    *string `json:"mp4_save_path,omitempty"`
	AutoClose      *bool   `json:"auto_close,omitempty"`
	StreamReplace  *string `json:"stream_replace,omitempty"`
}

type DefaultOutput struct {
	Code int    `json:"code"` // 错误代码，0 代表允许推流
	Msg  string `json:"msg"`  // 不允许推流时的错误提示
}

func newDefaultOutputOK() DefaultOutput {
	return DefaultOutput{Code: 0, Msg: "success"}
}

type onStreamNoneReaderOutput struct {
	Code  int  `json:"code"`
	Close bool `json:"close"`
}

type onStreamNoneReaderInput struct {
	App           string `json:"app"`           // 流应用名
	Schema        string `json:"schema"`        // rtsp 或 rtmp
	Stream        string `json:"stream"`        // 流 ID
	Vhost         string `json:"vhost"`         // 流虚拟主机
	MediaServerID string `json:"mediaServerId"` // 服务器 id,通过配置文件设置
}

type onRTPServerTimeoutInput struct {
	LocalPort     int    `json:"local_port"`    // openRtpServer 输入的参数
	ReUsePort     bool   `json:"re_use_port"`   // openRtpServer 输入的参数
	SSRC          uint32 `json:"ssrc"`          // openRtpServer 输入的参数
	StreamID      string `json:"stream_id"`     // openRtpServer 输入的参数
	TCPMode       int    `json:"tcp_mode"`      // openRtpServer 输入的参数
	MediaServerID string `json:"mediaServerId"` // 服务器 id,通过配置文件设置
}

type onStreamNotFoundInput struct {
	MediaServerID string `json:"mediaServerId"` // 服务器 id,通过配置文件设置
	App           string `json:"app"`           // 流应用名
	ID            string `json:"id"`            // TCP链接唯一ID
	IP            string `json:"ip"`            // 播放器ip
	Params        string `json:"params"`        // 播放url参数
	Port          int    `json:"port"`          // 播放器端口号
	Schema        string `json:"schema"`        // 播放的协议，可能是rtsp、rtmp、http
	Stream        string `json:"stream"`        // 流 ID
	Vhost         string `json:"vhost"`         // 流虚拟主机
}
